Delete level with elements
The below code snippet shows deleting the level with all the elements from current DGN using the same level.
public bool DeleteLevelWithElements()
{
//Set level name to delete
string levelNameToDelete = "ASampleLevel";
//Get Active Dgn Model
//DgnModel model = Session.Instance.GetActiveDgnModel();
DgnModelRef dgnModelRef = Session.Instance.GetActiveDgnModelRef();
//Get all levels collection
FileLevelCache fileLevelCache = dgnModelRef.GetFileLevelCache();
LevelHandle levelToDelete = fileLevelCache.GetLevelByName(levelNameToDelete);
if (levelToDelete == null) return false;
try
{
DgnFile dgnFile = dgnModelRef.GetDgnFile();
//Get all models collection from DGN
ModelIndexCollection modelIndexCollection = dgnFile.GetModelIndexCollection();
foreach (ModelIndex modelIndex in modelIndexCollection)
{
DgnModel dgnModel = dgnFile.LoadRootModelById(out StatusInt status, modelIndex.Id);
ModelElementsCollection modelElementsCollection = dgnModel.GetGraphicElements();
foreach (Element element in modelElementsCollection)
{
LevelId elementLevelID = element.LevelId;
//Compare element level Id and level to delete Id
if (levelToDelete.LevelId == elementLevelID)
{
if (!element.IsDeleted && !element.IsInvisible && element.IsGraphics && element.IsPersistent && element.IsValid)
{
try
{
//Delete element from DGN
element.DeleteFromModel();
}
catch (Exception ex)
{
Trace.WriteLine(ex.Message);
}
}
}
}
}
}
catch (Exception ex)
{
Trace.WriteLine(ex.Message);
}
//Delete Level
LevelHandle next = null;
if (LevelCacheErrorCode.None == fileLevelCache.RemoveLevel(next, levelToDelete))
return true;
else
return false;
}